package com.ev.scm.dao;


import com.ev.scm.domain.DeliveryNoteItemDO;
import com.ev.scm.vo.CountBean;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
  * Description 发货通知子表MAPPER
  * Company Xin Soft
  * @author Liu Yu
  * Date 2020/12/31
 **/
@Component
public interface DeliveryNoteItemDao {


    /**
     * 根据入参查询发货通知明细表中的总数量
     * @param sourceIds 源单id列表
     * @param sourceType 源单类别
     * @return 总数
     */
    List<CountBean> findCountBySource(@Param("list") List<Object> sourceIds, @Param("sourceType")Long sourceType) throws Exception;

    /**
     * 根据主表id查询子表明细
     * @param mainId 发货通知主表id
     * @return 明细列表
     */
    List<DeliveryNoteItemDO> findDetailByMainId(@Param("mainId") Long mainId) throws Exception;

    /**
     * 根据主表id查询子表明细
     * @param detailId 发货通知主表id
     * @return 明细列表
     */
    List<DeliveryNoteItemDO> findDetailByDetailId(@Param("detailId") Long detailId) throws Exception;

    /**
     * 批量保存发货通知子表
     * @param beans 发货通知子表bean列表
     * @throws Exception 异常
     */
    void saveBeans(List<DeliveryNoteItemDO> beans) throws Exception;

    /**
     * 批量真删发货通知子表
     * @param itemIds 发货通知子表id
     * @throws Exception 异常
     */
    void batchDelDeliveryNoteItem(@Param("list") List<Long> itemIds) throws Exception;

    /**
     * 发货通知列表查询
     * @param params 参数
     * @return R
     * @throws Exception 异常
     */
    List<Map<String, Object>> findList(Map<String, Object> params) throws Exception;

    /**
     * 发货通知列表查询总数
     * @param params 参数
     * @return R
     * @throws Exception 异常
     */
     int findListCount(Map<String, Object> params) throws Exception;

    /**
     * 合计数量和金额
     * @param params 参数
     * @return R
     * @throws Exception 异常
     */
    Map<String,Object> sumCountAndAmount(Map<String, Object> params) throws Exception;

    /**
     * 根据id获取发货通知主表详情
     * @param id 发货通知主表id
     * @return 发货通知主表详情
     * @throws Exception 异常
     */
    Map<String, Object> findHeadInfo(Long id) throws Exception;

    /**
     * 根据主表id获取发货通知详情列表
     * @param mainId 发货通知主表id
     * @return 发货通知详情列表
     * @throws Exception 异常
     */
    List<Map<String, Object>> findBodyInfo(Long mainId) throws Exception;

    /**
     * 根据id获取发货通知子表详情
     * @param id 发货通知子表id
     * @return 发货通知详情
     * @throws Exception 异常
     */
    DeliveryNoteItemDO findItemDetail(Long id) throws Exception;


    List<DeliveryNoteItemDO>findItemDetailByIds(@Param("list") List<Long> itemIds);
    /**
     * 根据发货通知主表id批量删除子表记录
     * @param ids 主表id列表
     * @throws Exception 异常
     */
    void deleteByMainIds(List<Long> ids) throws Exception;

    int batchUpdate(List<DeliveryNoteItemDO> param);

}
